package medium;

/**
 * @author shizhun
 * @description:
 * @date 2025/9/9 14:19
 * @see DeviceEntity
 */
public class T8 {
    public static void main(String[] args) {
        System.out.println(new T8().myAtoi("   -042"));
    }

    public int myAtoi(String s) {
//        空格：读入字符串并丢弃无用的前导空格（" "）
//        符号：检查下一个字符（假设还未到字符末尾）为 '-' 还是 '+'。如果两者都不存在，则假定结果为正。
//        转换：通过跳过前置零来读取该整数，直到遇到非数字字符或到达字符串的结尾。如果没有读取数字，则结果为0。
//        舍入：如果整数数超过 32 位有符号整数范围 [−231,  231 − 1] ，需要截断这个整数，使其保持在这个范围内。具体来说，小于 −231 的整数应该被舍入为 −231 ，大于 231 − 1 的整数应该被舍入为 231 − 1 。
        boolean firstSpan = true;
        boolean firstSymbol = true;
        long res = 0;
        int isPositive = 1;
        int i = 0;
        while (i < s.length()) {
            if (s.charAt(i) == ' ' && firstSpan) {
                i++;
                continue;
            }
            if ((s.charAt(i) == '+' || s.charAt(i) == '-') && firstSymbol) {
                firstSymbol = false;
                firstSpan = false;
                if (s.charAt(i) == '-') {
                    isPositive = -1;
                }
                i++;
                continue;
            }
            firstSpan = false;
            firstSymbol = false;
            if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                res = res * 10 + ((s.charAt(i) - '0') * isPositive);
            }else {
                return (int) res;
            }
            if (res >= Integer.MAX_VALUE || res <= Integer.MIN_VALUE) {
                return res >= Integer.MAX_VALUE ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            i++;
        }
        return (int)res;
    }
}
